﻿///***************************************************************
/// 시  스  템 : SMFramework
/// 단위시스템 : Utility
/// 계      층 : Framework Utility
/// 프로그램명 : GridViewUtil
/// 파  일  명 : GridViewUtil.cs
/// 설      명 : 그리드뷰 관련 유틸리티
///***************************************************************
/// 수정ID 일자       이름     내용
///---------------------------------------------------------------
/// CH001  2010-09-29 송시명   최초 작성
///***************************************************************
///
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SMFramework.Utility
{
	/// <summary>
	/// 그리드뷰 관련 유틸리티
	/// </summary>
	class GridViewUtil
	{
		#region ExcelExport

		/// <summary>
		/// 그리드뷰를 excel로 export
		/// </summary>
		/// <param name="fileName"></param>
		/// <param name="gv"></param>
		public static void ExcelExport(string fileName, GridView gv)
		{
			HttpContext.Current.Response.Clear();
			HttpContext.Current.Response.AddHeader(
				"content-disposition", string.Format("attachment; filename={0}", fileName));
			HttpContext.Current.Response.ContentType = "application/ms-excel";

			using (StringWriter sw = new StringWriter())
			{
				using (HtmlTextWriter htw = new HtmlTextWriter(sw))
				{
					Table table = new Table();

					table.GridLines = gv.GridLines;

					if (gv.HeaderRow != null)
					{
						GridViewUtil.PrepareControlForExport(gv.HeaderRow);
						table.Rows.Add(gv.HeaderRow);
					}

					foreach (GridViewRow row in gv.Rows)
					{
						GridViewUtil.PrepareControlForExport(row);
						table.Rows.Add(row);
					}

					if (gv.FooterRow != null)
					{
						GridViewUtil.PrepareControlForExport(gv.FooterRow);
						table.Rows.Add(gv.FooterRow);
					}

					table.RenderControl(htw);

					HttpContext.Current.Response.Write(sw.ToString());
					HttpContext.Current.Response.End();
				}
			}
		}

		#endregion

		#region PrepareControlForExport
		private static void PrepareControlForExport(Control control)
		{
			for (int i = 0; i < control.Controls.Count; i++)
			{
				Control current = control.Controls[i];
				if (current is LinkButton)
				{
					control.Controls.Remove(current);
					control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
				}
				else if (current is ImageButton)
				{
					control.Controls.Remove(current);
					control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
				}
				else if (current is HyperLink)
				{
					control.Controls.Remove(current);
					control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
				}
				else if (current is DropDownList)
				{
					control.Controls.Remove(current);
					control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
				}
				else if (current is CheckBox)
				{
					control.Controls.Remove(current);
					control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
				}

				if (current.HasControls())
				{
					GridViewUtil.PrepareControlForExport(current);
				}
			}
		}

		#endregion
	}
}
